/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Metodos;

import Atributos.Professor;
import Atributos.Serie;
import BD.CriaConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Andre
 */
public class ProfessorMet {
     private Connection conexao;
    public ProfessorMet() {
        try {
            this.conexao=(Connection) CriaConexao.getConexao();
        } catch (SQLException ex) {
            Logger.getLogger(ProfessorMet.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    }

    public List<Professor> BuscarNome(String nome) throws SQLException {
        String sql = "select * from professor where nome_prof like ? order by nome_prof";
        List<Professor> minhaLista;
        PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
                stmt.setString(1, nome);
                ResultSet rs = stmt.executeQuery();
            minhaLista = new ArrayList<>();
            while (rs.next()) {
                Professor a1 = new Professor();
                a1.setId(rs.getInt("id_prof"));
                a1.setNome(rs.getString("nome_prof"));
                a1.setCarga_horaria(rs.getInt("carga_horaria"));
                minhaLista.add(a1);
            }
        
        return minhaLista;
        
       
    }

    public void Adiciona(Professor p) {
         String sql = "insert into professor (nome_prof,carga_horaria)"+" values (?,?)";
            
            try{
            try (PreparedStatement consulta = (PreparedStatement) conexao.prepareStatement(sql)) {
                consulta.setString(1, p.getNome());
                consulta.setInt(2, p.getCarga_horaria());
                consulta.execute();
            }
            
        }catch(SQLException ex){
            Logger.getLogger(ProfessorMet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public int BuscaId(Professor p) {
        String sql = "select * from professor where nome_prof like ?";
            int id=0;
         try {
          PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql); 
          stmt.setString(1, p.getNome());
                    ResultSet rs = stmt.executeQuery();
                
                while (rs.next()){
                    Professor d = new Professor();
                    
                    d.setId(rs.getInt("id_prof"));
                    id=d.getId();
                    
                }
            
           
        } catch (SQLException ex) {
            Logger.getLogger(ProfessorMet.class.getName()).log(Level.SEVERE, null, ex);
        }
          return id;
    }

    public void DeletarProfessor(int a) throws SQLException {
        System.out.println("ta deletando");
         String sql_e = "delete from professor where id_prof=?";
         String sql_f = "delete from professor_serie_turma where id_prof_pst=?";
         String sql_g = "delete from prof_dia_aula where id_prof_pda=?";
         String sql_h = "delete from prof_disc where id_prof_pd=?";
         String sql_i = "delete from hora_aula where id_prof_ha=?";
       PreparedStatement consulta_e = (PreparedStatement) conexao.prepareStatement(sql_e); 
            PreparedStatement consulta_f = (PreparedStatement) conexao.prepareStatement(sql_f);
            PreparedStatement consulta_g = (PreparedStatement) conexao.prepareStatement(sql_g);
            PreparedStatement consulta_h = (PreparedStatement) conexao.prepareStatement(sql_h);
            PreparedStatement consulta_i = (PreparedStatement) conexao.prepareStatement(sql_i);
            consulta_e.setInt(1, a);
            consulta_f.setInt(1, a);
            consulta_g.setInt(1, a);
            consulta_h.setInt(1, a);
            consulta_i.setInt(1, a);
            consulta_h.execute();
            consulta_f.execute();
            consulta_g.execute();
            consulta_i.execute();
            
            consulta_e.execute();

    }

    public void alterarProf(Professor prof) {
        String sql = " update professor set nome_prof=?,carga_horaria=? where id_prof=?";
        PreparedStatement stmt;
        try {
            stmt = (PreparedStatement) conexao.prepareStatement(sql);
            stmt.setString(1, prof.getNome());
        stmt.setInt(2, prof.getCarga_horaria());
        stmt.setInt(3, prof.getId());
        stmt.execute();
        stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(ProfessorMet.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    }

    public List<Professor> BuscarProfPorTurma(Serie s) throws SQLException {
        String sql="select professor.id_prof, professor.nome_prof from serie,professor,professor_serie_turma,descricao where serie.id_turma_s=descricao.id_desc and professor_serie_turma.id_prof_pst=professor.id_prof and professor_serie_turma.id_serie_turma_pst=serie.id_serie and "
                + "serie.nome_serie like ? and descricao.descricao_desc like ?";
        List<Professor> minhalista= new ArrayList<>();
        PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
        stmt.setString(1, s.getNome());
        stmt.setString(2, s.getTurma());
                ResultSet rs = stmt.executeQuery();
             while (rs.next()) {
                Professor a1 = new Professor();
                a1.setId(rs.getInt("id_prof"));
                a1.setNome(rs.getString("nome_prof"));
                            
                minhalista.add(a1);
            }
        
        return minhalista;
        
        
        
    }

    
public void alterarCHProf(Professor prof) {
        String sql = " update professor set carga_horaria=? where id_prof=?";
        PreparedStatement stmt;
        try {
            stmt = (PreparedStatement) conexao.prepareStatement(sql);
            
        stmt.setInt(1, prof.getCarga_horaria()+1);
        stmt.setInt(2, prof.getId());
        stmt.execute();
        stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(ProfessorMet.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    }
   public int abuscaCHProf(Professor prof) {
        String sql = " select professor.carga_horaria from professor WHERE professor.id_prof=?";
        int id=0;
        PreparedStatement stmt; 
        try {
            stmt = (PreparedStatement) conexao.prepareStatement(sql);
            stmt.setInt(1, prof.getId());
                    ResultSet rs = stmt.executeQuery();
                
                while (rs.next()){
                    Professor d = new Professor();
                    
                    d.setCarga_horaria(rs.getInt("carga_horaria"));
                    id=d.getCarga_horaria();
                    
                }
        
        } catch (SQLException ex) {
            Logger.getLogger(ProfessorMet.class.getName()).log(Level.SEVERE, null, ex);
        }
          return id;
        
    }
   
   public int buscaCHantes(Professor prof) {
        String sql = " select professor2.carga_horaria2 from professor2 WHERE professor2.id_prof2=?";
        int id=0;
        PreparedStatement stmt; 
        try {
            stmt = (PreparedStatement) conexao.prepareStatement(sql);
            stmt.setInt(1, prof.getId());
                    ResultSet rs = stmt.executeQuery();
                
                while (rs.next()){
                    Professor d = new Professor();
                    
                    d.setCarga_horaria(rs.getInt("carga_horaria2"));
                    id=d.getCarga_horaria();
                    
                }
        
        } catch (SQLException ex) {
            Logger.getLogger(ProfessorMet.class.getName()).log(Level.SEVERE, null, ex);
        }
          return id;
        
    }

    public boolean VerificaPendencia()  {
         String sql="select * from professor";
         int i=0;
         List<Professor> minhalista= new ArrayList<>();
        PreparedStatement stmt;
        try {
            stmt = (PreparedStatement) conexao.prepareStatement(sql);
        
        ResultSet rs = stmt.executeQuery();
             while (rs.next()) {
                int id_prof=rs.getInt("id_prof");
                                    String sql2="select sum(hora_aula.horas_aula) from hora_aula,professor where hora_aula.id_prof_ha=professor.id_prof and professor.id_prof=?";
                                    PreparedStatement stmt2 = (PreparedStatement) conexao.prepareStatement(sql2);
                                    stmt2.setInt(1, id_prof);
                                    ResultSet rs2 = stmt2.executeQuery();
                                    String sql3="select count(prof_dia_aula.id_prof_pda) from prof_dia_aula,professor where prof_dia_aula.id_prof_pda=professor.id_prof and professor.id_prof=?";
                                    PreparedStatement stmt3 = (PreparedStatement) conexao.prepareStatement(sql3);
                                    stmt3.setInt(1, id_prof);
                                    ResultSet rs3 = stmt3.executeQuery();
                                        while (rs2.next() && rs3.next()) {
                                            int soma=rs2.getInt("sum");
                                            int aulas=rs3.getInt("count");
                                            if(soma>aulas){
                                                i=1;
                                                Professor a1 = new Professor();
                                                
                                                a1.setNome(rs.getString("nome_prof"));
                                                a1.setAulas(soma);
                                                a1.setDiasdispo(aulas);
                                                a1.setCarga_horaria(rs.getInt("carga_horaria"));
                                                minhalista.add(a1);
                                            }

                                        }       
               
            }
        } catch (SQLException ex) {
            Logger.getLogger(ProfessorMet.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(i==1){
            int sub,sub2;
            for(int a=0;a<minhalista.size();a++){
               int aulas=minhalista.get(a).getAulas();
               int dias=minhalista.get(a).getDiasdispo();
               int ch=minhalista.get(a).getCarga_horaria();
               sub=aulas-dias;
               sub2=aulas-ch;
            if(aulas>ch && aulas>dias){
              JOptionPane.showMessageDialog(null, "<html>O seguinte professor(a) encontra-se com a quantidade de aulas maior do que sua carga horária: "+minhalista.get(a).getNome()+"<br>Será preciso adicionar mais "+sub2+" na carga horária"+"<br>O(a) mesmo(a) encontra-se com mais aulas do que com dias disponíveis"+"<br>Será preciso adicionar mais "+sub+" dia(s) disponível(s)");
              
            }else if(aulas>dias && aulas<ch){
               JOptionPane.showMessageDialog(null, "<html>O seguinte professor(a) encontra-se com mais aulas do que com dias disponíveis: "+minhalista.get(a).getNome()+"<br>Será preciso adicionar mais "+sub+" dia(s) disponível(s)");
             
            }else if(aulas<dias && aulas>ch){
                JOptionPane.showMessageDialog(null, "<html>O seguinte professor(a) encontra-se com a quantidade de aulas maior do que sua carga horária: "+minhalista.get(a).getNome()+"<br>Será preciso adicionar mais "+sub2+" na carga horária");
              
            }
            }
            return false;
        }else{
            return true;
        }
        
    }

    public List<Professor> BuscaTodosProf() throws SQLException {
        String sql="select DISTINCT professor.id_prof, professor.nome_prof from professor, rel_prof where rel_prof.id_prof_rp=professor.id_prof";
        List<Professor> minhalista= new ArrayList<>();
        PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement(sql);
        
                ResultSet rs = stmt.executeQuery();
             while (rs.next()) {
                Professor a1 = new Professor();
                a1.setId(rs.getInt("id_prof"));
                a1.setNome(rs.getString("nome_prof"));
                            
                minhalista.add(a1);
            }
        
        return minhalista;
    }
}
